package gui.standard.form;

import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import model.tablemodel.StavkaPopisaTableModel;
import net.miginfocom.swing.MigLayout;
import util.components.JDecimalTextField;
import util.components.JDigitsTextField;
import util.components.JLimitedTextField;
import actions.standard.form.ZoomFormAction;

public class StavkaPopisaForm extends StandardForm {

	private static final long serialVersionUID = 1L;
	private JLimitedTextField tfSifraPreduzeca;
	private JLimitedTextField tfSifraSektora;
	private JDigitsTextField tfIdKomisije;
	private JDigitsTextField tfPoslovnaGodina;
	private JLimitedTextField tfSifraMagacina;
	private JDigitsTextField tfRedniBrojPopisa;
	private JTextField tfDatumPopisa;
	private JDigitsTextField tfRedniBrojStPopisa;
	private JLimitedTextField tfSifraGrupe;
	private JDigitsTextField tfSifraArtikla;
	private JDecimalTextField tfKolicinaPoPopisu;
	private JDecimalTextField tfKolicinaPoKartici;

	private JButton bPopisniDokumentZoom;
	private JButton bAnalitikaMagacinskeKarticeZoom;

	public StavkaPopisaForm() {

	}
	
	@Override
	public void init(){
		
		super.init();
		
		tfSifraPreduzeca = new JLimitedTextField(12, 12, true);
		tfSifraSektora = new JLimitedTextField(12, 12, true);
		tfIdKomisije = new JDigitsTextField(7, 7, true, true);
		tfPoslovnaGodina = new JDigitsTextField(4, 4, false, false);
		tfSifraMagacina = new JLimitedTextField(12, 12, true);
		tfRedniBrojPopisa = new JDigitsTextField(10, 10, true, false);
		tfDatumPopisa = new JTextField(12);
		tfRedniBrojStPopisa = new JDigitsTextField(10, 10, true, false);
		tfSifraGrupe = new JLimitedTextField(12, 12, true);
		tfSifraArtikla = new JDigitsTextField(12, 12, true, true);
		tfKolicinaPoPopisu = new JDecimalTextField(13, 12, 2, ',', true);
		tfKolicinaPoKartici = new JDecimalTextField(13, 12, 2, ',', true);
		
		setTitle("Stavka popisa");
		
		tableModel = new StavkaPopisaTableModel(
				new String[] { "Sifra preduzeca", "Sifra sektora", "ID komisije",
						"Poslovna godina", "Sifra magacina", "Redni broj popisa",
						"Datum popisa", "Redni broj st. popisa", "Sifra grupe",
						"Sifra artikla", "Kolicina po popisu",
						"Kolicina po kartici" }, 0);

		tblGrid.setModel(tableModel);
		
		bPopisniDokumentZoom = new JButton(new ZoomFormAction(this,
				new PopisniDokumentForm()));
		bAnalitikaMagacinskeKarticeZoom = new JButton(
				new ZoomFormAction(this, new AnalitikaMagacinskeKarticeForm()));

		
		JPanel bottomPanel = new JPanel();
		bottomPanel.setLayout(new MigLayout("fillx"));
		JPanel dataPanel = new JPanel();
		dataPanel.setLayout(new MigLayout("gapx 15px"));

		JLabel lblSifraPreduzeca = new JLabel("Sifra preduzeca:");
		JLabel lblSifraSektora = new JLabel("Sifra sektora:");
		JLabel lblIdKomisije = new JLabel("ID komisije:");
		JLabel lblPoslovnGodina = new JLabel("Poslovna godina:");
		JLabel lblSifraMagacina = new JLabel("Sifra magacina:");
		JLabel lblRedniBrojPopisa = new JLabel("Redni broj popisa:");
		JLabel lblDatumPopisa = new JLabel("Datum popisa:");
		JLabel lblRedniBrojStPopisa = new JLabel("Redni broj st. popisa:");
		JLabel lblSifraGrupe = new JLabel("Sifra grupe:");
		JLabel lblSifraArtikla = new JLabel("Sifra artikla:");
		JLabel lblKolicinaPoPopisu = new JLabel("Kolicina po popisu:");
		JLabel lblKolicinaPoKartici = new JLabel("Kolicina po kartici:");

		dataPanel.add(lblSifraPreduzeca);
		dataPanel.add(tfSifraPreduzeca);
		dataPanel.add(bPopisniDokumentZoom, "wrap");
		dataPanel.add(lblSifraSektora);
		dataPanel.add(tfSifraSektora, "pushx");
		dataPanel.add(lblIdKomisije);
		dataPanel.add(tfIdKomisije, "wrap");
		dataPanel.add(lblPoslovnGodina);
		dataPanel.add(tfPoslovnaGodina, "pushx");
		dataPanel.add(lblSifraMagacina);
		dataPanel.add(tfSifraMagacina, "wrap");
		dataPanel.add(lblRedniBrojPopisa);
		dataPanel.add(tfRedniBrojPopisa, "pushx");
		dataPanel.add(lblDatumPopisa);
		dataPanel.add(tfDatumPopisa, "wrap");
		dataPanel.add(lblRedniBrojStPopisa);
		dataPanel.add(tfRedniBrojStPopisa, "pushx");
		dataPanel.add(lblSifraGrupe);
		dataPanel.add(tfSifraGrupe);
		dataPanel.add(bAnalitikaMagacinskeKarticeZoom, "wrap");
		dataPanel.add(lblSifraArtikla);
		dataPanel.add(tfSifraArtikla, "pushx");
		dataPanel.add(lblKolicinaPoPopisu);
		dataPanel.add(tfKolicinaPoPopisu, "wrap");
		dataPanel.add(lblKolicinaPoKartici);
		dataPanel.add(tfKolicinaPoKartici, "pushx");
		bottomPanel.add(dataPanel);

		bottomPanel.add(buttonsPanel, "dock east");

		add(bottomPanel, "grow, wrap");
	}

	@Override
	public void sync() {
		// TODO Auto-generated method stub
		int index = tblGrid.getSelectedRow();
		if (index < 0) {
			tfSifraPreduzeca.setText("");
			tfSifraSektora.setText("");
			tfIdKomisije.setText("");
			tfPoslovnaGodina.setText("");
			tfSifraMagacina.setText("");
			tfRedniBrojPopisa.setText("");
			tfDatumPopisa.setText("");
			tfRedniBrojStPopisa.setText("");
			tfSifraGrupe.setText("");
			tfSifraArtikla.setText("");
			tfKolicinaPoPopisu.setText("");
			tfKolicinaPoKartici.setText("");
			return;
		}
		String sifraPreduzeca = (String) tableModel.getValueAt(index, 0);
		String sifraSektora = (String) tableModel.getValueAt(index, 1);
		String idKomisije = (String) tableModel.getValueAt(index, 2);
		String poslovnaGodina = (String) tableModel.getValueAt(index, 3);
		String sifraMagacina = (String) tableModel.getValueAt(index, 4);
		String redniBrojPopisa = (String) tableModel.getValueAt(index, 5);
		String datumPopisa = (String) tableModel.getValueAt(index, 6);
		String redniBrojStPopisa = (String) tableModel.getValueAt(index, 7);
		String sifraGrupe = (String) tableModel.getValueAt(index, 8);
		String sifraArtikla = (String) tableModel.getValueAt(index, 9);
		String kolicinaPoPopisu = (String) tableModel.getValueAt(index, 10);
		String kolicinaPoKartici = (String) tableModel.getValueAt(index, 11);
		
		kolicinaPoPopisu = kolicinaPoPopisu.replace(',', '.');
		kolicinaPoKartici = kolicinaPoKartici.replace(',', '.');
		
		double dkolicinaPoPopisu = Double.parseDouble(kolicinaPoPopisu);
		double dkolicinaPoKartici = Double.parseDouble(kolicinaPoKartici);

		tfSifraPreduzeca.setText(sifraPreduzeca);
		tfSifraSektora.setText(sifraSektora);
		tfIdKomisije.setText(idKomisije);
		tfPoslovnaGodina.setText(poslovnaGodina);
		tfSifraMagacina.setText(sifraMagacina);
		tfRedniBrojPopisa.setText(redniBrojPopisa);
		tfDatumPopisa.setText(datumPopisa);
		tfSifraGrupe.setText(sifraGrupe);
		tfRedniBrojStPopisa.setText(redniBrojStPopisa);
		tfSifraArtikla.setText(sifraArtikla);
		tfKolicinaPoPopisu.setValue(dkolicinaPoPopisu);
		tfKolicinaPoKartici.setValue(dkolicinaPoKartici);

		setMode(StandardForm.MODE_EDIT);

	}

	@Override
	public void addRow() {
		// TODO Auto-generated method stub
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String sifraSektora = tfSifraSektora.getText().trim();
		String idKomisije = tfIdKomisije.getText().trim();
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String sifraMagacina = tfSifraMagacina.getText().trim();
		String redniBrojPopisa = tfRedniBrojPopisa.getText().trim();
		String datumPopisa = tfDatumPopisa.getText().trim();
		String redniBrojStPopisa = tfRedniBrojStPopisa.getText().trim();
		String sifraGrupe = tfSifraGrupe.getText().trim();
		String sifraArtikla = tfSifraArtikla.getText().trim();
		String kolicinaPoPopisu = Double.toString(tfKolicinaPoPopisu.getValue());
		String kolicinaPoKartici = Double.toString(tfKolicinaPoKartici.getValue());
		try {
			int index = tableModel.insertRow(new String[] { sifraPreduzeca,
					sifraSektora, idKomisije, poslovnaGodina, sifraMagacina,
					redniBrojPopisa, datumPopisa, redniBrojStPopisa,
					sifraGrupe, sifraArtikla, kolicinaPoPopisu,
					kolicinaPoKartici });
			tblGrid.setRowSelectionInterval(index, index);
			setMode(MODE_ADD);
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public void searchRow() {
		// TODO Auto-generated method stub
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String sifraSektora = tfSifraSektora.getText().trim();
		String idKomisije = tfIdKomisije.getText().trim();
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String sifraMagacina = tfSifraMagacina.getText().trim();
		String redniBrojPopisa = tfRedniBrojPopisa.getText().trim();
		String datumPopisa = tfDatumPopisa.getText().trim();
		String redniBrojStPopisa = tfRedniBrojStPopisa.getText().trim();
		String sifraGrupe = tfSifraGrupe.getText().trim();
		String sifraArtikla = tfSifraArtikla.getText().trim();
		String kolicinaPoPopisu = Double.toString(tfKolicinaPoPopisu.getValue());
		String kolicinaPoKartici = Double.toString(tfKolicinaPoKartici.getValue());
		try {
			tableModel.searchRows(new String[] { sifraPreduzeca, sifraSektora,
					idKomisije, poslovnaGodina, sifraMagacina, redniBrojPopisa,
					datumPopisa, redniBrojStPopisa, sifraGrupe, sifraArtikla,
					kolicinaPoPopisu, kolicinaPoKartici });
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public void editRow() {
		// TODO Auto-generated method stub
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String sifraSektora = tfSifraSektora.getText().trim();
		String idKomisije = tfIdKomisije.getText().trim();
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String sifraMagacina = tfSifraMagacina.getText().trim();
		String redniBrojPopisa = tfRedniBrojPopisa.getText().trim();
		String datumPopisa = tfDatumPopisa.getText().trim();
		String redniBrojStPopisa = tfRedniBrojStPopisa.getText().trim();
		String sifraGrupe = tfSifraGrupe.getText().trim();
		String sifraArtikla = tfSifraArtikla.getText().trim();
		String kolicinaPoPopisu = Double.toString(tfKolicinaPoPopisu.getValue());
		String kolicinaPoKartici = Double.toString(tfKolicinaPoKartici.getValue());
		try {
			int index = tableModel.editRow(new String[] { sifraPreduzeca,
					sifraSektora, idKomisije, poslovnaGodina, sifraMagacina,
					redniBrojPopisa, datumPopisa, redniBrojStPopisa,
					sifraGrupe, sifraArtikla, kolicinaPoPopisu,
					kolicinaPoKartici }, tblGrid.getSelectedRow());
			tblGrid.setRowSelectionInterval(index, index);
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public void setMode(int mode) {
		super.setMode(mode);

		if (mode != StandardForm.MODE_ADD)
			return;

		tfSifraPreduzeca.setText("");
		tfSifraSektora.setText("");
		tfIdKomisije.setText("");
		tfPoslovnaGodina.setText("");
		tfSifraMagacina.setText("");
		tfRedniBrojPopisa.setText("");
		tfDatumPopisa.setText("");
		tfRedniBrojStPopisa.setText("");
		tfSifraGrupe.setText("");
		tfSifraArtikla.setText("");
		tfKolicinaPoPopisu.setText("");
		tfKolicinaPoKartici.setText("");
	}

	@Override
	public String[] getSelectedRowKeys() {
		// TODO Auto-generated method stub
		return new String[]{tfSifraPreduzeca.getText().trim(), tfSifraSektora.getText().trim(), 
				tfIdKomisije.getText().trim(), tfPoslovnaGodina.getText().trim(), tfSifraMagacina.getText().trim(), 
				tfRedniBrojPopisa.getText().trim(), tfDatumPopisa.getText().trim(), tfRedniBrojStPopisa.getText().trim()};
	}

	@Override
	public void getZoomedCol(String[] keys, StandardForm form) {
		// TODO Auto-generated method stub
		if(form instanceof ArtikalForm){
			tfSifraGrupe.setText(keys[0]);
			tfSifraArtikla.setText(keys[1]);
		}else if(form instanceof PopisniDokumentForm){
			tfIdKomisije.setText(keys[0]);
			tfPoslovnaGodina.setText(keys[1]);
			tfSifraPreduzeca.setText(keys[2]);
			tfSifraSektora.setText(keys[3]);
			tfSifraMagacina.setText(keys[4]);
			tfRedniBrojPopisa.setText(keys[5]);
			tfDatumPopisa.setText(keys[6]);
		}
		
	}

	@Override
	public String[] getSelectedRowNextKeys(int index) {
		// TODO Auto-generated method stub
		return new String[]{};
	}

}
